
typedef enum{
	LEGNO = 0, PIETRA, ARGILLA, ORO, STOFFA, VETRO, PAPIRI, MONETE
} Tipo_risorsa;

typedef int risorse[8];

typedef struct lista_risorse{
	risorse valore;
	struct lista_risorse *succ;
}lista_risorse;


typedef enum{
	MARRONE = 0, VIOLA, BLU, ROSSO, VERDE, GIALLO, GRIGIO, TRASPARENTE
} Colore;

struct giocatore;				//per evitare una dipendenza ciclica

typedef struct carta{
	int num;	
 	int risorsa; 					//1 se è una carta risorsa -------> per ora le ho messe tutte risorse	
	char nome[32];
	int era; 
 	Colore colore;
	struct carta* gioca_gratis;	// punta alla carta che la farebbe giocare gratis
	risorse costo;				//costo della carta
	risorse produzione;		//produzione (solo se risorsa) 
	int multipla;			// 1 se risorse a scelta (solo se risorsa)
	int commerciabile;		// 1 se sono acquistabili dai vicini (solo se risorsa)
	void (*azione_istantanea)(struct giocatore*);
	void (*azione_finale)(struct giocatore*);
	struct carta* succ;
} carta;


void stampa(carta* c);
int lunghezza(carta* m);
carta* precedente(carta* mazzo, carta* c);
carta* scambia(carta* mazzo, carta* c1, carta* c2);
carta* lista_carte_togli(carta* mazzo, carta* c);
carta* mescola_mazzo(carta* mazzo);
carta* lista_carte_aggiungi(carta* lista, carta* da_aggiungere);

carta* la_prima_di_era(carta* mazzo, int n);
carta* pesca7(carta** mazzo);

void azzera_risorse(risorse p);

int risorse_uguali(lista_risorse* r, lista_risorse* s);
void dealloca_lista_risorse(lista_risorse* r);
void lista_risorse_aggiungi_ciascuno(carta* da_aggiungere, lista_risorse* lista_ereditata, int n);
void lista_risorse_aggiungi_ciascuno_risorse(lista_risorse* da_aggiungere, lista_risorse* lista_ereditata, int n);
int lista_risorse_permette_di_giocare(lista_risorse* possibili_risorse, carta* da_giocare);
lista_risorse* lista_risorse_duplica(lista_risorse* lista_ereditata);
lista_risorse* lista_risorse_append(lista_risorse* lista, lista_risorse* da_aggiungere);
lista_risorse* lista_risorse_elimina_per_valore(lista_risorse* r, lista_risorse* delete);
lista_risorse* lista_risorse_elimina_doppioni(lista_risorse* r);
void lista_risorse_stampa(lista_risorse* proprie);


carta* lista_carte_cerca_per_nome(carta* da_cercare, carta* dove_cercare);
